package com.hgd.security.evp.common.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import java.util.ArrayList;
import java.util.List;

/**
 * @author 尚村山夫
 */
public class JSONUtil {

    /**
     * 将java对象转化为JSONObject对象
     *
     * @param o
     * @return
     */
    public static JSONObject parseObject(Object o) {
        if (EmptyUtil.isEmpty(o)) {
            return null;
        }

        return JSONObject.parseObject(JSON.toJSONString(o));
    }

    /**
     * 合并JSONObject对象
     *
     * @param j1 对象1，可能为NULL
     * @param j2 对象2，可能为NULL
     * @return 合并结果或NULL(如果j1, j2同时为NULL)
     */
    public static JSONObject mergeJSONObject(JSONObject j1, JSONObject j2) {
        if (EmptyUtil.isEmpty(j1) && EmptyUtil.isEmpty(j2)) {
            return null;
        } else if (EmptyUtil.isEmpty(j1) && EmptyUtil.isNotEmpty(j2)) {
            return j2;
        } else if (EmptyUtil.isEmpty(j2) && EmptyUtil.isNotEmpty(j1)) {
            return j1;
        }

        JSONObject result = new JSONObject();
        result.putAll(j1);
        result.putAll(j2);

        return result;
    }

    /**
     * 将JSONObject对象转化为java对象
     *
     * @param jobj  待转化JSONObject对象
     * @param clazz 目标java类
     * @param <T>   泛型
     * @return 转化后结果
     */
    public static <T> T toJavaObject(JSONObject jobj, Class<T> clazz) {
        return jobj.toJavaObject(clazz);
    }

    /**
     * 将JSONArray转化为java集合
     * @param jArray 待转化JSONArray
     * @param clazz 目标java类
     * @param <T> 泛型
     * @return 转化后结果集
     */
    public static <T> List<T> toJavaList(JSONArray jArray,Class<T> clazz){
        return jArray.toJavaList(clazz);
    }

    /**
     * 将一个集合对象转化为JSONObject对象的List集合
     * @param o
     */
    public static List<JSONObject> toJSONList(Object o) {
        try {
            return JSON.parseArray(JSON.toJSONString(o), JSONObject.class);
        } catch (Exception e) {
            return new ArrayList<>();
        }
    }
}
